/*
 * BuildingAspect.h
 *
 *  Created on: Oct 27, 2008
 *      Author: Ryan
 */

#ifndef BUILDINGASPECT_H_
#define BUILDINGASPECT_H_

#include "../../Direction.h"
#include "../../GameMap.h"
#include "UnitAspect.h"
#include <vector>

namespace OOInterface
{

class BuildingAspect: public UnitAspect
{
public:
	BuildingAspect( float _maxHeight, float _minDepth, float _maxDepth );
	virtual ~BuildingAspect();

	virtual void accept( UnitVisitor& v ) const { v.visitBuildingAspect( *this ); }

	virtual std::string toString() const { return std::string("Aspect: BuildingAspect"); }

	bool canBuildAt( const GameMap& map, const Point3f loc, const Direction facing = Direction(0.0f) ) const;

	float getMaxHeightDifference() const { return _maxHeightDiff; }
	float getMinWaterDepth() const { return _minWaterDepth; }
	float getMaxWaterDepth() const { return _maxWaterDepth; }

	void setMaxHeightDifference( float max ) { _maxHeightDiff = max; }
	void setMinWaterDepth( float min ) { _minWaterDepth = min; }
	void setMaxWaterDepth( float max ) { _maxWaterDepth = max; }

private:
	float _maxHeightDiff;
	float _minWaterDepth;
	float _maxWaterDepth;
};

}

#endif /* BUILDINGASPECT_H_ */
